<?php
// 设置编码格式
header('Content-Type: text/html; charset=utf-8');

define('IN_TG', true);
// 引入公共文件
require_once('../../dream_include/common.inc.php');
// 小程序api接口验证文件
require ROOT_PATH . 'dream_include/mini_api_func.php';

// 访问api页面的来源验证
url_source_chk();

// 验证传递来的openid
$openid = openid_get(_get_isset('openid'));

// 验证小程序端传来signstr 和 usr_sign解密后验证是否合法有效
usr_sign_chk(_get_isset('signstr'), _get_isset('usr_sign'), $openid);

$encrypteddata = _get_isset('encrypteddata');
if (!$encrypteddata) {
    echo "{\"errCode\":\"2001\",\"errMsg\":\"登录失败\"}";
    exit();
}
$encrypteddata = htmlspecialchars($encrypteddata);
$iv = _get_isset('iv');
if (!$iv) {
    echo "{\"errCode\":\"2001\",\"errMsg\":\"登录失败\"}";
    exit();
}
$iv = htmlspecialchars($iv);

// 引入解码文件
include_once "wxBizDataCrypt.php";
$appid = 'wx90c91a6910......';
$dbconn = new DbMysql();
// 获取 session_key
$getinfo = $dbconn->sql_fetch_assoc("SELECT usr_id,wx_openid,wx_session_key,wx_usr_phone FROM resource_wechat_user_library WHERE isdeleted=0 AND wx_openid='$openid' ORDER BY usr_id DESC LIMIT 1");
if ($getinfo) {
    $session_key = $getinfo['wx_session_key'];
} else {
    $dbconn->dbClose();
    //echo '验证失败';
    $session_key = '';
    echo "{\"errCode\":\"2001\",\"errMsg\":\"验证失败\"}";
    exit;
}
// 使用 session_key 解码
$pc = new WXBizDataCrypt($appid, $session_key);
$errCode = $pc->decryptData($encrypteddata, $iv, $data);
// $data 格式：{"phoneNumber":"15910734779","purePhoneNumber":"15910734779","countryCode":"86","watermark":{"timestamp":1659778896,"appid":"wx90c91a691067caa0"}}
// 解码成功，去数据库更新或判断
if ($errCode == 0) {
    // 成功解码手机号，判断手机号是和数据库中相同，相同直接返回结果，不同更新手机号。
    $data_arr = json_decode($data, JSON_OBJECT_AS_ARRAY);
    // 成功时返回的数据中加上注册姓名
    $data_arr['errCode'] = 0;
    $data_arr['errMsg'] = '重复授权手机号';
    $data_new = json_encode($data_arr);
    // 数据库中自己的数据是相同的手机号，直接返回解码数据，不改数据库。
    if ($data_arr['phoneNumber'] == $getinfo['wx_usr_phone'] ) {
        print($data_new);
    } else {
        // 数据库中判断是否已使用过此手机号，如果已使用，提示占用。
        $phone_exist = $dbconn->sql_fetch_assoc("SELECT usr_id FROM resource_wechat_user_library WHERE wx_openid != '$openid' AND wx_usr_phone='". $data_arr['phoneNumber']."' ORDER BY usr_id DESC LIMIT 1");
        if ($phone_exist) {
            $dbconn->dbClose();
            echo "{\"errCode\":\"1001\",\"errMsg\":\"手机号已被占用\"}";
            exit;
        }
        // 更新当前用户的手机号
        $_newinfo['wx_usr_phone'] = $data_arr['phoneNumber'];
        $_newinfo['modify_time'] = date("Y-m-d H:i:s");
        $_newinfo['modify_ip'] = getip();
        // 执行修改数据库
        $_where = "wx_openid = '" . $openid . "'";
        $result1 = $dbconn->upWhereArr($_newinfo, 'resource_wechat_user_library', $_where);
        // 从 临时表 更新用户信息 或直接更新手机号 end
        
        // 操作记录
        $dbconn->addOperateRecord($table_type = 3, $operate_type = 27, $info_id = $getinfo['usr_id'], $affect_rows = $result1[0], $item_description = '更新小程序手机号: '. $data_arr['phoneNumber'], $user_category = 3, $user_identify = $openid);
        // 不管更新是否成功，关闭数据库
        $dbconn->dbClose();
        $data_arr['errMsg'] = '手机号验证成功';
        $data_new = json_encode($data_arr);
        print($data_new);
    }
    
} else {
    // 解码失败，返回数字编码
    echo "{\"errCode\":\"1001\",\"errMsg\":\"解码失败\",\"originalCode\":\"". $errCode."\"}";
    exit;
    // print($errCode);
}


// //写入log日志，记录安全隐患
// function slog($logs)
// {
//     $toppath = "visit.txt";
//     $Ts = fopen($toppath, "ab+");
//     fwrite($Ts, $logs . "\r\n\r\n");
//     fclose($Ts);
// }


?>